// my/pages/Login/Login.js
const {
    setAuthData
} = require('../../../utils/storageUtil.js');
Page({
  register() {
    wx.navigateTo({
      url: '/my/pages/Register/Register'
    });
  },

    /**
     * 页面的初始数据
     */
    data: {
        username: '',
        password: '',
        code: '',
        uuid: '',
        codeUrl: '',
        captchaEnabled: true,
        loading: false,
        rememberMe: false
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.getCode();
        this.loadRememberedLogin(); // 加载记住的登录信息
    },
    /**
     * 切换记住密码状态
     */
    toggleRememberMe(e) {
        const rememberMe = e.detail.value.length > 0;
        this.setData({
            rememberMe: rememberMe
        });
        console.log('记住密码状态:', rememberMe);
    },
    /**
     * 加载记住的登录信息
     */
    loadRememberedLogin() {
        try {
            const rememberedLogin = wx.getStorageSync('rememberedLogin');
            if (rememberedLogin) {
                this.setData({
                    username: rememberedLogin.username || '',
                    password: rememberedLogin.password || '',
                    rememberMe: true
                });
                console.log('已加载记住的登录信息');
            }
        } catch (e) {
            console.error('加载记住的登录信息失败:', e);
        }
    },
    /**
     * 保存登录信息（用于记住密码功能）
     */
    saveRememberedLogin() {
        const {
            username,
            password,
            rememberMe
        } = this.data;

        try {
            if (rememberMe && username && password) {
                // 保存用户名和密码
                wx.setStorageSync('rememberedLogin', {
                    username: username,
                    password: password
                });
                console.log('已保存登录信息');
            } else {
                // 清除保存的登录信息
                wx.removeStorageSync('rememberedLogin');
                console.log('已清除保存的登录信息');
            }
        } catch (e) {
            console.error('保存登录信息失败:', e);
        }
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 输入用户名
     */
    inputUsername(e) {
        this.setData({
            username: e.detail.value
        });
    },

    /**
     * 输入密码
     */
    inputPassword(e) {
        this.setData({
            password: e.detail.value
        });
    },

    /**
     * 输入验证码
     */
    inputCode(e) {
        this.setData({
            code: e.detail.value
        });
    },

    /**
     * 获取验证码
     */
    getCode() {
        // 导入http工具
        const {
            http
        } = require('../../../utils/http');
        // 调用后端验证码接口
        http.get('/captchaImage')
            .then(res => {
                // 处理不同的数据格式
                let captchaData = res;
                // 如果res是undefined，尝试从原始响应中获取
                if (!captchaData) {
                    console.warn('验证码接口返回数据为空');
                    this.setData({
                        captchaEnabled: false
                    });
                    return;
                }

                this.setData({
                    captchaEnabled: captchaData.captchaEnabled || false,
                    codeUrl: captchaData.img ? 'data:image/gif;base64,' + captchaData.img : '',
                    uuid: captchaData.uuid || ''
                });
            })
            .catch(err => {
                console.error('获取验证码失败:', err);

                // 如果主接口失败，尝试备用接口
                http.get('/dev-api/captchaImage')
                    .then(res => {
                        // 处理不同的数据格式
                        let captchaData = res;
                        if (!captchaData) {
                            console.warn('备用验证码接口返回数据为空');
                            this.setData({
                                captchaEnabled: false
                            });
                            return;
                        }

                        this.setData({
                            captchaEnabled: captchaData.captchaEnabled || false,
                            codeUrl: captchaData.img ? 'data:image/gif;base64,' + captchaData.img : '',
                            uuid: captchaData.uuid || ''
                        });
                    })
                    .catch(err => {
                        console.error('备用验证码接口也失败:', err);
                        // 如果验证码服务不可用，禁用验证码
                        this.setData({
                            captchaEnabled: false
                        });

                        wx.showToast({
                            title: '验证码服务不可用，已跳过验证码',
                            icon: 'none',
                            duration: 3000
                        });
                    });
            });
    },




    /**
     * 表单验证
     */
    validateForm() {
        const {
            username,
            password,
            code,
            captchaEnabled
        } = this.data;

        if (!username) {
            wx.showToast({
                title: '请输入用户名',
                icon: 'none'
            });
            return false;
        }

        if (!password) {
            wx.showToast({
                title: '请输入密码',
                icon: 'none'
            });
            return false;
        }

        if (captchaEnabled && !code) {
            wx.showToast({
                title: '请输入验证码',
                icon: 'none'
            });
            return false;
        }

        return true;
    },

    /**
     * 登录
     */
    login() {
        const {
            username,
            password,
            code,
            uuid,
            captchaEnabled
        } = this.data;
        // 表单验证
        if (!this.validateForm()) {
            return;
        }
        // 显示加载提示
        this.setData({
            loading: true
        });
        wx.showLoading({
            title: '登录中...',
            mask: true
        });
        // 导入http工具
        const {
            http
        } = require('../../../utils/http');
        // 构建登录参数
        const loginParams = {
            username: username,
            password: password,
            grant_type: 'password',
            client_id: 'miniprogram'
        };
        // 如果启用了验证码，添加验证码参数
        if (captchaEnabled) {
            loginParams.code = code;
            loginParams.uuid = uuid;
        }
        // 调用后端登录接口
        http.post('/login', loginParams)
            .then(res => {
                // 隐藏加载提示
                wx.hideLoading();
                this.setData({
                    loading: false
                });
                // 从响应中获取token
                const token = res.token || res.access_token || res.accessToken;
                console.log('登录成功，获取到token:', token);

                // 保存token到本地存储（临时保存空的用户信息）
                setAuthData({}, token);
                wx.showToast({
                    title: '登录成功',
                    icon: 'success'
                });
                // 保存登录信息（记住密码功能）
                this.saveRememberedLogin();
                // 登录成功后，自动获取用户信息
                this.getUserInfoAfterLogin();
            })
            .catch(err => {
                // 隐藏加载提示
                wx.hideLoading();
                this.setData({
                    loading: false
                });
                // 如果启用了验证码，刷新验证码
                if (captchaEnabled) {
                    this.getCode();
                }
                // 输出详细错误信息到控制台，方便调试
                console.error('登录失败:', err);

                // 显示更详细的错误信息
                let errorMessage = '登录失败，请检查用户名或密码以及验证码';

                wx.showToast({
                    title: errorMessage,
                    icon: 'none',
                    duration: 1000
                });
            });
    },

    /**
     * 启动token过期检测服务
     */
    startTokenCheckService() {
        try {
            const { tokenService } = require('../../../utils/tokenService.js');
            if (tokenService) {
                console.log('登录成功后启动token过期检测服务');
                tokenService.startTokenCheck();
            }
        } catch (error) {
            console.error('启动token检测服务失败:', error);
        }
    },

    /**
     * 登录成功后获取用户信息
     */
    getUserInfoAfterLogin() {
        const {
            http
        } = require('../../../utils/http');
        const {
            setAuthData
        } = require('../../../utils/storageUtil.js');

        // 调用getInfo接口获取用户信息
        http.get('/getInfo')
            .then(res => {
                // 提取用户信息、角色、权限
                const userInfo = res.user || {};
                const roles = res.roles || [];
                const permissions = res.permissions || [];
                console.log('提取的用户信息:', userInfo);
                // 保存完整的用户认证信息
                const {
                    getToken
                } = require('../../../utils/storageUtil.js');
                const token = getToken();
                setAuthData(userInfo, token, roles, permissions);
                
                // 启动token过期检测服务
                this.startTokenCheckService();
                
                // 跳转到主页
                setTimeout(() => {
                    wx.switchTab({
                        url: '/pages/index/index'
                    });
                }, 1000);
            })
            .catch(err => {
                console.error('获取用户信息失败:', err);

                // 即使获取失败也跳转到主页
                setTimeout(() => {
                    wx.switchTab({
                        url: '/pages/index/index'
                    });
                }, 1000);
            });
    }
})